from abc import ABC, abstractmethod
from enum import Enum, auto

__all__ = ["Emotion", "EmotionClassifier"]


class Emotion(Enum):
    """
    An emotion.

    In this project, we only use three emotions: positive, neutral, and negative.
    """

    POSITIVE = auto()
    NEUTRAL = auto()
    NEGATIVE = auto()


class EmotionClassifier(ABC):
    """
    An emotion classifier.

    This class is used to classify the emotion of a sentence.
    """

    @abstractmethod
    def classify(self, sentence: str) -> Emotion:
        """
        Classify the emotion of a sentence.

        Args:
            sentence (str): The sentence to classify.

        Returns:
            Emotion: The emotion of the sentence.
        """
        raise NotImplementedError()
